<?php
defined('_IN_CMS') or die('Fuck off');

class Forum extends Db
{
    use browser, data, face, pagination, rights;

    private $errors; // массив сообщений об ошибках
    public $data;

    public function __construct()
    {
        // Стандартные данные статьи
        $this->data['id'] = 0;
    }

    public function showMessage()
    {
        // Показать один единственный пост
        // Допиливать и допиливать

        $this->data['url_name'] = $_GET['url_name']; // Имя статьи на транслите
        $_SESSION['article_view'] = $this->data['id']; // Номер просматриваемой статьи

        $this->data['section_title'] = $_GET['section'];
        $this->data['category_title'] = $_GET['category'];
        $this->data['section_id'] = $this->sections_table[$_GET['section']];
        $this->data['category_id'] = $this->categories_table[$_GET['category']];
        
        $article_sql = self::db_query("SELECT * FROM `".core::$table_name['articles']."` WHERE (`url_name`='".$this->data['url_name']."') AND (`section` = '".$this->data['section_id']."') AND (`category` = '".$this->data['category_id']."') ORDER BY `".core::$table_name['articles']."`.`id` LIMIT 1 --");
        if (mysql_num_rows($article_sql) > 0) {
            $this->data['id'] = mysql_result($article_sql, 0, core::$table_name['articles'].".id");
            self::db_query("UPDATE `".core::$table_name['articles']."` SET `views` = `views` + 1 WHERE `".core::$table_name['articles']."`.`id` = '".$this->data['id']."' LIMIT 1 --");

            $this->data['title'] = check_article(mysql_result($article_sql, 0, core::$table_name['articles'].'title'));
            $this->data['text'] = check_article_text(mysql_result($article_sql, 0, 'article'));
            $this->data['tags'] = mysql_result($article_sql, 0, 'tags');
            
            echo '<div class="page_title"><a href="/articles/" title="Статьи">Статьи</a>Что-то</a></div>
                <div class="container">
                <article id="article">'.$this->data['text'].'</article>
                <div class="show_art_right">
                    <div style="height: 55;">
                        <span class="lessons_date">Категория: <a class="a_category" href="article.php?category='.mysql_result($article_sql, 0, core::$table_name['articles'].".category").'" title="'.$this->data['category_title'].'">'.$this->data['category_title'].'</a></span><br>
                        <span class="lessons_date">Автор: '.mysql_result($article_sql, 0, core::$table_name['articles'].".author_login").'</span><br>
                        <span class="lessons_date">31.02.2011</span><br>
                        <span class="lessons_date">'.$this->data['tags'].'</span>';
            if (check_session())
                echo '
                        <br><a href="add_article.php?edit='.$this->data['id'].'" title="Правка"><img src="inc/images/edit.png" alt="E" width="16" height="16"></a>&nbsp;
                        <a href="delete.php?article_id='.$this->data['id'].'" title="Удалить"><img src="inc/images/delete.png" alt="X" width="16" height="16"></a>';
            echo '</div>';
            include('inc/php/html/form_add_comment_to_article.php');
        } else { // если ноль записей
            echo '
                <div class="page_title"><a href="http://miha.ru/articles/" title="Статьи">Статьи</a> :: 
                <a href="http://miha.ru/articles/" title="404">Статья не найдена</a></div>
                <div class="container">
                <article id="article">
                    Привет. Если ты видишь этот текст, то знай, что ты сделал что-то не так. 
                    Попробуй перезагрузить компьютер. 
                </article>';
        }
    }
    
    public function showShort($numb)
    {
        // Показать список последних сообщений
        $lastarticles = self::db_query("SELECT * 
        FROM 
        `phorum_topics`, `phorum_sections`, `phorum_categories`, `users00` 
        WHERE 
        `phorum_topics`.`hidden` = FALSE AND 
        `phorum_topics`.`last_post_by` = `users00`.`id` AND
        `phorum_topics`.`category` = `phorum_categories`.`id` AND
        `phorum_topics`.`section` = `phorum_sections`.`id`
        ORDER BY 
        `phorum_topics`.`time` DESC 
        LIMIT $numb --");
        if (mysql_num_rows($lastarticles) > 0) {
            for($i = 0; $i < mysql_num_rows($lastarticles); $i++)
            {
                $this->data['id'] = mysql_result($lastarticles, $i, "phorum_topics.id");
                $this->data['section_title'] = mysql_result($lastarticles, $i, "phorum_sections.title");
                $this->data['category_title'] = mysql_result($lastarticles, $i, "phorum_categories.title");
                $this->data['title'] = mysql_result($lastarticles, $i, "phorum_topics.title");
                $this->data['full_title'] = mysql_result($lastarticles, $i, "phorum_topics.full_title");
                $this->data['author_login'] = mysql_result($lastarticles, $i, "users00.login");
                $this->data['url_name'] = mysql_result($lastarticles, $i, "phorum_topics.title");
                $this->data['last_post_by_login'] = mysql_result($lastarticles, $i, "users00.login");

                if (!file_exists('articles/thumbs/'.$this->data['id'].'.jpg')) {
                    $img_src='articles/thumbs/default_article_thumb.jpg';
                } else {
                    $img_src = 'articles/thumbs/'.$this->data['id'].'.jpg';
                }
                $this->showLastTopicsLeft($this->data);
            }
        } else {
            $this->printError("Тем нет");
        }
    }
    
    public function showSections(&$user)
    {
        // Показать секции, главная форума (OK)
        include('inc/php/html/forum_panel_sec.php');
        $sec_list = self::db_query("SELECT `id`, `title`, `full_title`, `forum`, `description`, `hidden`, `closed`
            FROM `phorum_sections` 
            WHERE `phorum_sections`.`hidden` = 0 ORDER BY `phorum_sections`.`id` ASC --");

        for ($i = 0; $i < mysql_num_rows($sec_list); $i++)
        {
            $this->data['id'] = (int)mysql_result($sec_list, $i, "phorum_sections.id");
            $this->data['title'] = mysql_result($sec_list, $i, "phorum_sections.title");
            $this->data['full_title'] = mysql_result($sec_list, $i, "phorum_sections.full_title");
            $this->data['description'] = mysql_result($sec_list, $i, "phorum_sections.description");
            $cat_list = self::db_query("SELECT `id` FROM `phorum_topics` 
                WHERE `phorum_topics`.`section` = '".$this->data['id']."' 
                 --");
            $this->data['count'] = (int)mysql_num_rows($cat_list);
            
            $this->data['thumb_extension'] = 'jpg';
            
            if (!file_exists('data/forum/_sections/'.$this->data['id'].'.'.$this->data['thumb_extension'])) {
                $this->data['thumb_extension'] = 'png';
            }
            if (!file_exists('data/forum/_sections/'.$this->data['id'].'.'.$this->data['thumb_extension'])) {
                $this->data['thumb_extension'] = 'gif';
            }
            if (!file_exists('data/forum/_sections/'.$this->data['id'].'.'.$this->data['thumb_extension'])) {
                $this->data['thumb_extension'] = 'jpeg';
            }
            
            // Путь до файла-эскиза секции
            $this->data['img_path'] = 'data/forum/_sections/'.$this->data['id'].'.'.$this->data['thumb_extension'];
            if (!file_exists($this->data['img_path'])) {
                $this->data['img_path'] = 'data/forum/_sections/default.jpg';
            }
            if ($user::can($user, 1)) {
                $this->data['can_delete'] = 1;
            } else {
                $this->data['can_delete'] = 0;
            }
            $this->showSectionsForumFace($this->data);
        }
        echo '
            </div>
            <div id="parent_popup" onclick="document.getElementById(\'parent_popup\').style.display=\'none\'; 
                document.getElementById(\'popup\').style.display=\'none\';">
            </div>
            <div id="popup" onmousedown="dragOBJ(this, event); return false;" style="height: 130px; padding: 4px 2px;">
                <div id="popup_header">Предупреждение</div>
                <div style="height: 64px; line-height: 64px; text-align: center;">Ты действительно хочешь удалить секцию?</div>
                <div class="button_login" style="float: right;  width: 130px; cursor: pointer;" onClick="document.getElementById(\'parent_popup\').style.display=\'none\'; 
                    document.getElementById(\'popup\').style.display=\'none\';">Нет</div>
                <div class="button_login" id="item_id" value="0" style="cursor: pointer;" onClick="delete_item(\'forum_section\', this.value); 
                    document.getElementById(\'parent_popup\').style.display=\'none\'; 
                    document.getElementById(\'popup\').style.display=\'none\'; 
                    document.getElementById(\'cat_item\'+this.value).style.display=\'none\';">Да</div>
            </div>';
    }       

    public function showCategories(&$user)
    {
        // Показать список категорий
        include('inc/php/html/forum_panel_cat.php');
        $this->data['section'] = (string)$_GET['section'];

        $cat_list = self::db_query("SELECT `phorum_sections`.`id` AS 'sec_id', 
                                       `phorum_sections`.`title` AS 'sec_title', 
                                       `phorum_categories`.`id` AS 'cat_id', 
                                       `phorum_categories`.`title` AS 'cat_title', 
                                       `phorum_categories`.`full_title` AS 'full_title', 
                                       `phorum_categories`.`section` AS 'cat_sec' 
                                FROM `phorum_sections` , `phorum_categories` 
                                WHERE `phorum_categories`.`section` = `phorum_sections`.`id` 
                                AND `phorum_sections`.`title` = '".$this->data['section']."' ");

        if (mysql_num_rows($cat_list) > 0) {
            $cat_list = self::db_query("SELECT * FROM `phorum_categories` WHERE (`section` = '".mysql_result($cat_list, 0, "sec_id")."')");

            for ($i = 0; $i < mysql_num_rows($cat_list); $i++) {
                $this->data['id'] = mysql_result($cat_list, $i, "phorum_categories.id");
                $this->data['title'] = mysql_result($cat_list, $i, "phorum_categories.title");
                $this->data['full_title'] = mysql_result($cat_list, $i, "phorum_categories.full_title");
                $this->data['description'] = mysql_result($cat_list, $i, "phorum_categories.description");
                $cat_list2 = self::db_query("SELECT `id` FROM `phorum_topics` WHERE `category` = ".$this->data['id']." --");
                $this->data['count'] = mysql_num_rows($cat_list2);
                echo '
                <div class="cat_item">
                    <div class="article_thumb_div"><!-- Эскиз -->
                        <img src="/data/forum/_categories/'.$this->data['id'].'.jpg" alt="'.$this->data['title'].'" class="index_article_thumb">
                    </div>
                    <div>
                        <a href="/forum/'.$this->data['section'].'/'.$this->data['title'].'" 
                        class="index_article_title">'.$this->data['full_title'].'</a>
                    </div>
                    <div class="articles_description">'.$this->data['description'].'</div>
                    <div class="articles_panel_info_panel">
                        Тем: <span>'.$this->data['count'].'</span>
                    </div>
                </div>';
            }
        } else {
            echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=/">';
            $this->printError('Категорий в данной секции нет');
        }
        echo '</div>'; // div container
    }

    public function showTopics($numb)
    {
        // Показать список тем
        $section_title = $_GET['section'];
        $category_title = $_GET['category'];

        $topic_list = 
        self::db_query("SELECT `phorum_sections`.`id`, `phorum_sections`.`title`, 
        `phorum_categories`.`id`, `phorum_categories`.`title`, 
        `phorum_topics`.`title` AS 'topic_title', `phorum_topics`.`full_title`, `phorum_topics`.`author`, `phorum_topics`.`last_post_by`, 
        `phorum_topics`.`section`, `phorum_topics`.`category`, `phorum_topics`.`id` AS 'topic_id', 
        `phorum_topics`.`time`, `phorum_topics`.`mess_count`,
        `users00`.`id`, `users00`.`login` 
            FROM `phorum_sections`, `phorum_categories`, `phorum_topics` , `users00`
            WHERE `phorum_topics`.`section` = `phorum_sections`.`id` 
            AND `phorum_topics`.`category` = `phorum_categories`.`id` 
            AND `phorum_topics`.`author` = `users00`.`id` 
            AND `phorum_categories`.`section` = `phorum_sections`.`id`
            AND `phorum_sections`.`title` = '$section_title'
            AND `phorum_categories`.`title` = '$category_title'
            -- ");

        $last_post = self::db_query("SELECT `phorum_topics`.`last_post_by` AS 'last_post_by_id', 
            `phorum_topics`.`id` AS 'topic_id', `users00`.`id` AS 'user_id', 
            `users00`.`login` AS 'user_login', `phorum_sections`.`id` AS 'sec_id', 
            `phorum_categories`.`title` 
            FROM 
            `phorum_sections` , `phorum_categories` , `phorum_topics` , `users00` 
            WHERE `phorum_topics`.`last_post_by` = `users00`.`id` 
            AND `phorum_topics`.`section` = `phorum_sections`.`id` 
            AND `phorum_topics`.`category` = `phorum_categories`.`id` 
            AND `phorum_sections`.`title` = '$section_title'
            AND `phorum_categories`.`title` = '$category_title'
            -- ");

        // Панель на форуме (Новая тема, ...)
        $this->showForumTopPanel($section_id, $category_id, $section_title, $category_title);
        if (mysql_num_rows($topic_list) > 0) {
            $section_id = mysql_result($topic_list, 0, "phorum_topics.section");
            $category_id = mysql_result($topic_list, 0, "phorum_topics.category");
            for ($i = 0; $i < mysql_num_rows($topic_list); $i++)    {
                $this->data['id'] = mysql_result($topic_list, $i, "topic_id");
                $this->data['section'] = mysql_result($topic_list, $i, "section");
                $this->data['section_title'] = mysql_result($topic_list, $i, "section");
                $this->data['category'] = mysql_result($topic_list, $i, "category");
                $this->data['category_title'] = mysql_result($topic_list, $i, "category");
                $this->data['title'] = mysql_result($topic_list, $i, "topic_title");
                $this->data['full_title'] = mysql_result($topic_list, $i, "full_title");
                $this->data['mess_count'] = (int)mysql_result($topic_list, $i, "mess_count");
                $this->data['section_title'] = $section_title;
                $this->data['cat_title'] = $category_title;
                $this->data['author_login'] = mysql_result($topic_list, $i, "login"); // Автор темы
                $this->data['last_post_by'] = mysql_result($last_post, $i, "user_login"); // Автор последнего сообщения
                $this->data['date'] = date('d.m.Y', strtotime(mysql_result($topic_list, $i, "time")));
                $this->showTopicsFace($this->data);
            }
        } else {
            $this->printError('Нет тем вот так ёпт');
        }
    }

    public function showNewTopics($numb)
    {
        // Показать список последних активных тем
        $topic_list = 
        self::db_query("SELECT `phorum_sections`.`id`, `phorum_sections`.`title`, 
        `phorum_categories`.`id`, `phorum_categories`.`title`, 
        `phorum_topics`.`title` AS 'topic_title', `phorum_topics`.`full_title`, 
        `phorum_topics`.`author`, `phorum_topics`.`last_post_by`, 
        `phorum_topics`.`section`, `phorum_topics`.`category`, 
        `phorum_topics`.`id`, 
        `phorum_topics`.`time`, `phorum_topics`.`mess_count`,
        `users00`.`id`, `users00`.`login` 
            FROM `phorum_sections`, `phorum_categories`, `phorum_topics` , `users00`
            WHERE `phorum_topics`.`section` = `phorum_sections`.`id` 
            AND `phorum_topics`.`category` = `phorum_categories`.`id` 
            AND `phorum_topics`.`author` = `users00`.`id` 
            AND `phorum_categories`.`section` = `phorum_sections`.`id`
            ORDER BY `phorum_topics`.`time` DESC
            LIMIT $numb -- ");

        $last_post = self::db_query("SELECT `phorum_topics`.`last_post_by` AS 'last_post_by_id', 
            `phorum_topics`.`id` AS 'topic_id', `users00`.`id` AS 'user_id', 
            `users00`.`login` AS 'user_login', `phorum_sections`.`id` AS 'sec_id', 
            `phorum_categories`.`title` 
            FROM 
            `phorum_sections` , `phorum_categories` , `phorum_topics` , `users00` 
            WHERE `phorum_topics`.`last_post_by` = `users00`.`id` 
            AND `phorum_topics`.`section` = `phorum_topics`.`section` 
            AND `phorum_topics`.`category` = `phorum_topics`.`category` 

            -- ");

        // Панель на форуме (Новая тема, ...)
        $this->showForumTopPanel($section_id, $category_id, $section_title, $category_title);
        if (mysql_num_rows($topic_list) > 0) {
            $section_id = mysql_result($topic_list, 0, "phorum_topics.section");
            $category_id = mysql_result($topic_list, 0, "phorum_topics.category");
            for ($i = 0; $i < mysql_num_rows($topic_list); $i++)    {
                $this->data['id'] = mysql_result($topic_list, $i, "phorum_topics.id");
                $this->data['section'] = mysql_result($topic_list, $i, "section");
                $this->data['section_title'] = mysql_result($topic_list, $i, "section");
                $this->data['category'] = mysql_result($topic_list, $i, "category");
                $this->data['category_title'] = mysql_result($topic_list, $i, "category");
                $this->data['title'] = mysql_result($topic_list, $i, "topic_title");
                $this->data['full_title'] = mysql_result($topic_list, $i, "full_title");
                $this->data['mess_count'] = (int)mysql_result($topic_list, $i, "mess_count");
                $this->data['section_title'] = $section_title;
                $this->data['cat_title'] = $category_title;
                $this->data['author_login'] = mysql_result($topic_list, $i, "login"); // Автор темы
                $this->data['last_post_by'] = mysql_result($last_post, $i, "user_login"); // Автор последнего сообщения
                $this->data['date'] = date('d.m.Y', strtotime(mysql_result($topic_list, $i, "time")));
                $this->showTopicsFace($this->data);
            }
        } else {
            $this->printError('Нет тем вот так ёпт');
        }
    }

    public function showTopicMessages()
    {
        // Показать сообщения топика
        $this->data['section_title'] = $_GET['section']; // blender
        $this->data['category_title'] = $_GET['category']; // rendering
        $this->data['topic_title'] = $_GET['topic']; // pravila_foruma

        // Пагинация
        $stat_status = self::db_query("SELECT * FROM `phorum_messages`, `phorum_topics` 
        WHERE `phorum_topics`.`title` = '".$this->data['topic_title']."' 
        AND `phorum_messages`.`topic` = `phorum_topics`.`id`
        --"); //Состояние таблицы

        $this->count = (mysql_num_rows($stat_status) > 0) ? mysql_num_rows($stat_status) : 0; //Количество записей
        if ($this->count < $this->to) {
            // Если количество записей меньше, чем выбранный диапазон для показа,
            // то приравниваем эти значения в меньшую сторону
            $this->to = $this->count;    
        } else {
            $this->pages = ceil($this->count/$this->pp); // Количество страниц, округление в большую сторону
        }
        if (isset($_GET['page'])) {
            // Параметр - номер страницы
            $this->cur_page = abs((int)$_GET['page']);
            $this->from = ($this->cur_page*$this->pp)-$this->pp;
            $this->to = $this->from + $this->pp;
        }

        // Выбираем все сообщения из топика
        $messages = self::db_query("SELECT 
            `phorum_messages`.`id` AS 'message_id', `phorum_messages`.`author` AS 'author_id',
            `phorum_messages`.`topic`, `phorum_messages`.`text`, `phorum_messages`.`time`,
            `phorum_topics`.`id` AS 'topic_id', `phorum_topics`.`top_message` AS 'top_message',
            `users00`.`id` AS 'user_id', `users00`.`login` AS 'user_login', `phorum_messages`.`author_ua`
            FROM `phorum_topics`, `phorum_messages`, `users00`
            WHERE
            `users00`.`id` = `phorum_messages`.`author` AND
            `phorum_messages`.`topic` = `phorum_topics`.`id` AND
            `phorum_topics`.`title` = '".$this->data['topic_title']."'
            LIMIT $this->from, $this->to --");
        $empty_topic = self::db_query("
            SELECT * 
            FROM `phorum_topics`
            WHERE `phorum_topics`.`title` = '".$this->data['topic_title']."'
            LIMIT 1 --        
        ");
        if (mysql_num_rows($messages) > 0) {
            // Если есть сообщения в теме
            $this->data['top_message'] = mysql_result($messages, 0, "top_message");
            $this->showTopMessage($this->data);
            for ($i=0; $i<mysql_num_rows($messages); $i++) {
                //$this->setUserAgent(mysql_result($messages, $i, "phorum_messages.author_ua"));
                //$this->data['ua'] = strtolower($this->getBrowser());
                //$this->data['os'] = strtolower($this->getPlatform());
                $this->data['topic_id'] = mysql_result($messages, $i, "message_id");
                $this->data['author'] = mysql_result($messages, $i, "user_login");
                $this->data['author_id'] = mysql_result($messages, $i, "author_id");
                $this->data['user_login'] = mysql_result($messages, $i, "user_login");
                $this->data['date'] = date('d.m.Y', strtotime(mysql_result($messages, $i, "time")));
                $this->data['text'] = $this->filter_swear($this->filter_bb(mysql_result($messages, $i, "text")));
                $this->showTopicMessagesFace($this->data);
                $this->printPagination();
            }
        } else {
            if (mysql_num_rows($empty_topic) == 1) {
                $this->data['top_message'] = mysql_result($empty_topic, 0, "top_message");
                $this->showTopMessage($this->data);
            }
            // Если нет сообщений в теме
            $this->printError('Тема пуста');
        }
        // Показать форму для добавления сообщения в топик
        $this->showForumAddMessage($this->data);
    }

    public function add()
    {
        if (check_session()) {
            if (isset($_POST['title']) && isset($_POST['section']) && isset($_POST['category']) && isset($_POST['source']) && isset($_POST['description']) && isset($_POST['article'])  /*&& ($_SESSION['article_added'] == '1')*/) {
                {
                    $this->data['id'] = 0;
                    $this->data['date'] = '21.12.2012';
                    $this->data['section'] = (int)$_POST['section'];
                    $this->data['category'] = (int)$_POST['category'];
                    $this->data['ip'] = $_SESSION['ip'];
                    $this->data['ua'] = $_SESSION['ua'];
                    $this->data['author_login'] = $_SESSION['login'];
                    $this->data['author_name'] = 'Михаил';
                    $this->data['title'] = $_POST['title'];
                    $this->data['description'] = $_POST['description'];
                    $this->data['text'] = $_POST['article'];
                    $this->data['source'] = $_POST['source'];
                    $this->data['url_name'] = trans($_POST['title']);
                    $this->data['tags'] = $_POST['tags'];
                }
                // Проверяем изображения
                if (isset($_FILES)) {
                    $l = 1;
                    foreach ($_FILES['preview']['type'] as $val) {
                        if ($l >= 64) {
                            break; // Если загружено более 64 изображений
                        }
                        if ($val == '') {
                            continue;
                        } elseif ($val != 'image/jpeg') {
                            echo 'Изображения должны быть формата jpeg';
                            exit;
                        }
                        $l++;
                    }
                }
                $this->data['title'] = check($this->data['title'], 64); // Максимальная длина заголовка * 2
                $this->data['source'] = check($this->data['source'], 200); // Максимальная длина источника * 2
                $this->data['description'] = check($this->data['description'], 256); // Максимальная длина описания * 2
                $this->data['text'] = check($this->data['text'], 4096); // Максимальная длина заголовка * 2
                $this->data['tags'] = check($this->data['tags'], 256); // Максимальная длина заголовка * 2
                $this->data['url_name'] = trans($this->data['url_name']); // Название статьи на транслите
                
                // Переименовать эскиз
                copy('articles/images/index.php', 'articles/images/'.$last_id.'/index.php'); // Скопировать пустой index.php в директорию статьи
                if (isset($_FILES)) {
                    if (file_exists('./articles/thumbs/'.$_FILES['preview']['name'][0])) {
                        rename('./articles/thumbs/'.$_FILES['preview']['name'][0], './articles/thumbs/'.$last_id.'.jpg');
                        create_small('./articles/thumbs/'.$last_id.'.jpg', './articles/thumbs/'.$last_id.'.jpg', 100, 100);
                    }
                    for ($img_count = 1; $_FILES['preview']['name'][$img_count] != ''; $img_count++) {
                        $upfile = './articles/images/'.$last_id.'/'.$img_names[$img_count].'.jpg'; //Имя и адрес загружаемого файла
                        if (!move_uploaded_file($_FILES['preview']['tmp_name'][$img_count], $upfile)) {
                            echo 'Ошибка 3';
                            exit;
                        }
                    }
                }
                
                echo 'Статья успешно создана<br>
                <META HTTP-EQUIV="Refresh" CONTENT="0; URL=article.php?id='.$last_id.'">
                Если у тебя отключено перенаправление, то можешь перейти по <a href="article.php?id='.$last_id.'">ссылке</a>';
                
                // Записываем в БД имена файлов изображений
                for ($i=1; $i<$img_count; $i++) {
                    $this->data['images'] .= $img_names[$i].' ';
                }
                $this->data['images'] = trim($this->data['images']);
                for ($i=1; $i<=$img_count; $i++) {
                    $this->data['text'] = str_replace('[img='.$i.']', '[img='.$img_names[$i].']', $this->data['text']);
                }
                // Записываем статью в БД
                self::db_query("INSERT INTO `".core::$table_name['articles']."` (`section`, `category`, `ip`, `ua`, `author_login`, `title`, `description`, `article`, `url_name`, `source`, `images`, `tags`) 
                    VALUES ('".$this->data['section']."', '".$this->data['category']."', '".$this->data['ip']."', '".$this->data['ua']."', '".$this->data['author_login']."', '".$this->data['title']."', '".$this->data['description']."', '".$this->data['text']."', '".$this->data['url_name']."', '".$this->data['source']."', '".$this->data['images']."', '".$this->data['tags']."') --");
                $_SESSION['article_added'] = '1';
            }
        }
    }
    
    public function edit()
    {
        $id_of_article = (int)$_POST['id_of_article'];
        $title = $_POST['title'];
        $section = (int)$_POST['section'];
        $category = (int)$_POST['category'];
        $source = $_POST['source'];
        $description = $_POST['description'];
        $article = $_POST['article'];
        $tags = $_POST['tags'];
        $ip = $_SESSION['ip'];
        $ua = $_SESSION['ua'];
        $images = $_POST['images'];

        // Проверяем изображения
        if (isset($_FILES)) {
            $l = 1;
            foreach ($_FILES['preview']['type'] as $val) {
                if ($l > 64) break; // Если загружено более 64 изображений
                if ($val == '') {
                    continue;
                } elseif ($val != 'image/jpeg') {
                    echo 'Изображения должны быть формата jpeg';
                    exit;
                }
                $l++;
            }
        }
        // Фильтруем принятые данные
        $title = check($title, 64);              // Максимальная длина заголовка * 2
        $source = check($source, 200);           // Максимальная длина источника * 2
        $description = check($description, 256); // Максимальная длина описания * 2
        $article = check($article, 4096);        // Максимальная длина заголовка * 2
        $tags = check($tags, 256);               // Максимальная длина заголовка * 2
        $trans = trans($title);                  // Название статьи на транслите
        $author_login = $_SESSION['login'];      // Логин автора статьи
        $author_name = $_SESSION['name'];        // Логин автора статьи

        // Массив со случайными строками для имён изображений
        for ($i = 1; $i < $l; $i++) {
            $img_names[$i] = gen_img_names(4);
            // Т. е. в папке с изображениями статьи будут лежать изображения типа
            // fTyX.jpg, Bz5t.jpg etc
        }

        // Узнаём последний номер статьи и переименовываем изображение
        if (!is_dir('./articles/images/'.$id_of_article))
        mkdir('./articles/images/'.$id_of_article);    // Создаём эту директорию
        if (isset($_FILES)) {
            $upfile = './articles/thumbs/'.$_FILES['preview']['name'][0]; //Адрес загружаемого файла
            move_uploaded_file($_FILES['preview']['tmp_name'][0], $upfile); // Переместить временный файл в директорию статьи
        }

        // Переименовать эскиз
        if (isset($_FILES)) {
            if (file_exists('./articles/thumbs/'.$_FILES['preview']['name'][0])) {
                rename('./articles/thumbs/'.$_FILES['preview']['name'][0], './articles/thumbs/'.$id_of_article.'.jpg');
                create_small('./articles/thumbs/'.$id_of_article.'.jpg', './articles/thumbs/'.$id_of_article.'.jpg', 100, 100);
            }
        }
        copy('articles/images/index.php', 'articles/images/'.$id_of_article.'/index.php'); // Скопировать пустой index.php в директорию статьи
        if (isset($_FILES)) {
            for ($img_count = 1; $_FILES['preview']['name'][$img_count] != ''; $img_count++) {
                $upfile = './articles/images/'.$id_of_article.'/'.$img_names[$img_count].'.jpg'; //Имя и адрес загружаемого файла
                if (!move_uploaded_file($_FILES['preview']['tmp_name'][$img_count], $upfile)) {
                    echo 'Ошибка 3';
                    exit;
                }
            }
        }

        echo 'Статья успешно изменена<br>
        <META HTTP-EQUIV="Refresh" CONTENT="0; URL=article.php?id='.$id_of_article.'">';

        // Записываем в БД имена файлов изображений
        $images_str = $images.' ';
        for ($i=1; $i<$img_count; $i++) {
            $images_str .= $img_names[$i].' ';
        }
    
        // Обновляем статью в БД
        self::db_query("UPDATE `".core::$table_name['articles']."` SET 
        `section` = '$section', 
        `category` = '$category', 
        `ip` = '$ip', 
        `ua` = '$ua', 
        `author_login` = '$author_login', 
        `author_name` = '$author_name', 
        `title` = '$title', 
        `description` = '$description', 
        `article` = '$article', 
        `source` = '$source', 
        `images` = '$images_str', 
        `tags` = '$tags' 
        WHERE `".core::$table_name['articles']."`.`id` = '$id_of_article' LIMIT 1 --");
        $_SESSION['article_added'] = '1';
    }

    public function addMessageToTopic(&$user)
    {
        $section_title = $_GET['section'];
        $category_title = $_GET['category'];
        $topic_title = $_GET['topic'];

        // Добавление сообщения в топик
        $text = $_POST['article']; // Текст сообщения для форума
        
        $topic = self::db_query("SELECT `phorum_sections`.`id` AS 'section_id', 
        `phorum_categories`.`id` AS 'category_id', `phorum_topics`.`id` AS 'topic_id', 
        `phorum_sections`.`title` AS 'section_title', `phorum_categories`.`title` AS 'category_title', 
        `phorum_topics`.`id` AS 'topic_title', `phorum_topics`.`title` 
        FROM `phorum_topics` , `phorum_sections` , `phorum_categories` 
        WHERE `phorum_topics`.`title` = '$topic_title'
        AND `phorum_sections`.`id` = `phorum_categories`.`section` 
        AND `phorum_sections`.`title` = '$section_title'
        AND `phorum_categories`.`title` = '$category_title'
        AND `phorum_topics`.`category` = `phorum_categories`.`id` 
        LIMIT 0, 30");

        if (mysql_num_rows($topic) > 0) {
            $section_id = (int)mysql_result($topic, 0, 'section_id');
            $category_id = (int)mysql_result($topic, 0, 'category_id');
            $topic_id = (int)mysql_result($topic, 0, 'topic_id');
        
            if ((self::can($user, 1)) || (self::can($user, 27))) {
                // Если SVI
                // Если может писать в темы
                self::db_query("INSERT INTO `phorum_messages` (`id`,
                    `topic`, `time`, `author`, `author_ip`, `author_ua`, 
                    `text`, `time_edit`, `edited_by`, `comment`, `comment_by`, 
                    `edited_times`, `pluses`, `minuses`, `rating`, `hidden`) 
                    VALUES (NULL , '$topic_id', CURRENT_TIMESTAMP, '".$user->id."', '".$user->ip."', 
                    '".$user->ua."', '$text', '0000-00-00 00:00:00', '0', '0', '0', '0', '0', '0', '0', '0')");
                self::db_query("UPDATE `phorum_topics` SET `mess_count` = `mess_count` + 1 WHERE `phorum_topics`.`id` = $topic_id --");
                self::db_query("UPDATE `phorum_topics` SET `last_post_by` = '".$user->id."' WHERE `phorum_topics`.`id` = $topic_id --");
                $this->printMessage('Сообщение добавлено. Если ты не хочешь ждать, то перейди по  
                    <a href="/forum/'.$section_title.'/'.$category_title.'/'.$topic_title.'/">ссылке</a>
                    <META HTTP-EQUIV="Refresh" CONTENT="0; URL=/forum/'.$section_title.'/'.$category_title.'/'.$topic_title.'/">');
            } else {
                $this->errors[] = 'У тебя недостаточно прав';
            }
        } else {
            $this->errors[] = 'Такой темы не существует';
        }
        
        if (!empty($this->errors)) {
            $this->printError($this->errors);
        }
        
    }

    public function createTopic(&$user)
    {
        return 0;
    }

    public function addSection(&$user)
    {
        // Добавить секцию
        if (self::can($user, 1)) {
            // Если SVI
            $this->data['title'] = $_POST['title'];
            $this->data['full_title'] = $_POST['title'];
            $this->data['description'] = $_POST['description'];

            if ($_FILES['thumb']['error'] == 0) {
                // Если принят файл

                // Обработка изображения (эскиз для сцены)
                $valid_types =  array('gif', 'jpg', 'jpeg', 'png');
                
                if (is_array($_FILES['thumb']['name'])) {
                    // Если передано несколько файлов
                    $this->errors[] = 'Можно передать только один файл';
                }
                
                if (substr_count($_FILES['thumb']['name'], '.') > 0) {
                    // Если имя файла содержит точку
                    $this->data['extension'] = $this->getExtension($_FILES['thumb']['name']);
                } else {
                    // Имя файла не содержит точку
                    $this->errors[] = 'Имя файла не содержит точку';
                }

                // Проверка размера изображения
                if ($_FILES['thumb']['size'] <= 0) {
                    // У файла нулевой размер
                    $this->errors[] = 'Файл имеет нулевой размер';
                }

                // Проверка разрешённого расширения
                if (!in_array($this->data['extension'], $valid_types)) {
                    $this->errors[] = 'У файла неверное расширение: ';
                }

                // Проверка ошибок
                if ($_FILES['thumb']['error'] != 0) {
                    // Какая-то ошибка
                    $this->errors[] = 'Какая-то ошибка';
                }

                // Перемещение файла
                if (!move_uploaded_file($_FILES['thumb']['tmp_name'], 'data/forum/_sections/'.$_FILES['thumb']['name'])) {
                    // Файл не перемещён
                    $this->errors[] = 'Файл не перемещён';
                }
            } elseif ($_FILES['thumb']['error'] == 1) {
                $this->errors[] = 'Какой бальщой файл';
            } elseif ($_FILES['thumb']['error'] == 2) {
                $this->errors[] = 'Какой бальщой файл';
            } elseif ($_FILES['thumb']['error'] == 3) {
                $this->errors[] = 'Загружаемый файл был получен только частично';
            } elseif ($_FILES['thumb']['error'] == 4) {
                $this->errors[] = 'Файл не был загружен';
            } elseif ($_FILES['thumb']['error'] == 6) {
                $this->errors[] = 'Отсутствует временная папка';
            } elseif ($_FILES['thumb']['error'] == 7) {
                $this->errors[] = 'Не удалось записать файл на диск';
            } elseif ($_FILES['thumb']['error'] == 8) {
                $this->errors[] = 'PHP-расширение остановило загрузку файла';
            }

            // Проверка данных (заголовок, полный заголовок, описание)
            if ($_POST['title'] != preg_replace('/[^a-z]+/iu', '', $_POST['title'])) {
                $this->errors[] = 'Неверно введены данные';
            }
            if ($_POST['full_title'] != preg_replace('/[^a-zа-яА-ЯёЁ\s]+/iu', '', $_POST['full_title'])) {
                $this->errors[] = 'Неверно введены данные2';
            }
            if ($_POST['description'] != preg_replace('/[^a-zа-яА-ЯёЁ\s]+/iu', '', $_POST['description'])) {
                $this->errors[] = 'Неверно введены данные3';
            }

            if (empty($this->errors[0])) {
                self::db_query("INSERT INTO `phorum_sections` (`id`,`title`,`full_title`,`forum`,`description`, `hidden`, `closed`)
                    VALUES (NULL , '".$this->data['title']."', '".$this->data['full_title']."', '1', '".$this->data['description']."', '0', '0')");
                    $this->data['insert_id'] = self::insert_id();
                    rename('data/forum/_sections/'.$_FILES['thumb']['name'], 'data/forum/_sections/'.$this->data['insert_id'].'.'.$this->data['extension']);
                $this->printMessage("Секция успешно создана");
            } else {
                $this->printError($this->errors);
            }
        } else {
            $this->printError("У тебя недостаточно прав");
        }
        echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL='.$_SERVER['REQUEST_URI'].'">';
    }

    public function addCategory(&$user)
    {
        // Добавить секцию
        if (self::can($user, 1)) {
            // Если SVI
            $this->data['title'] = $_POST['title'];
            $this->data['full_title'] = $_POST['title'];
            $this->data['description'] = $_POST['description'];

            if ($_FILES['thumb']['error'] == 0) {
                // Если принят файл

                // Обработка изображения (эскиз для сцены)
                $valid_types =  array('gif', 'jpg', 'jpeg', 'png');
                
                if (is_array($_FILES['thumb']['name'])) {
                    // Если передано несколько файлов
                    $this->errors[] = 'Можно передать только один файл';
                }
                
                if (substr_count($_FILES['thumb']['name'], '.') > 0) {
                    // Если имя файла содержит точку
                    $this->data['extension'] = $this->getExtension($_FILES['thumb']['name']);
                } else {
                    // Имя файла не содержит точку
                    $this->errors[] = 'Имя файла не содержит точку';
                }

                // Проверка размера изображения
                if ($_FILES['thumb']['size'] <= 0) {
                    // У файла нулевой размер
                    $this->errors[] = 'Файл имеет нулевой размер';
                }

                // Проверка разрешённого расширения
                if (!in_array($this->data['extension'], $valid_types)) {
                    $this->errors[] = 'У файла неверное расширение: ';
                }

                // Проверка ошибок
                if ($_FILES['thumb']['error'] != 0) {
                    // Какая-то ошибка
                    $this->errors[] = 'Какая-то ошибка';
                }

                // Перемещение файла
                if (!move_uploaded_file($_FILES['thumb']['tmp_name'], 'data/forum/_categories/'.$_FILES['thumb']['name'])) {
                    // Файл не перемещён
                    $this->errors[] = 'Файл не перемещён';
                }
            } elseif ($_FILES['thumb']['error'] == 1) {
                $this->errors[] = 'Какой бальщой файл';
            } elseif ($_FILES['thumb']['error'] == 2) {
                $this->errors[] = 'Какой бальщой файл';
            } elseif ($_FILES['thumb']['error'] == 3) {
                $this->errors[] = 'Загружаемый файл был получен только частично';
            } elseif ($_FILES['thumb']['error'] == 4) {
                $this->errors[] = 'Файл не был загружен';
            } elseif ($_FILES['thumb']['error'] == 6) {
                $this->errors[] = 'Отсутствует временная папка';
            } elseif ($_FILES['thumb']['error'] == 7) {
                $this->errors[] = 'Не удалось записать файл на диск';
            } elseif ($_FILES['thumb']['error'] == 8) {
                $this->errors[] = 'PHP-расширение остановило загрузку файла';
            }

            // Проверка данных (заголовок, полный заголовок, описание)
            if ($_POST['title'] != preg_replace('/[^a-z]+/iu', '', $_POST['title'])) {
                $this->errors[] = 'Неверно введены данные';
            }
            if ($_POST['full_title'] != preg_replace('/[^a-zа-яА-ЯёЁ\s]+/iu', '', $_POST['full_title'])) {
                $this->errors[] = 'Неверно введены данные2';
            }
            if ($_POST['description'] != preg_replace('/[^a-zа-яА-ЯёЁ\s]+/iu', '', $_POST['description'])) {
                $this->errors[] = 'Неверно введены данные3';
            }

            if (empty($this->errors[0])) {
                self::db_query("INSERT INTO `phorum_categories` (`id`,`title`,`full_title`,`forum`,`section`, `description`, `hidden`, `closed`)
                    VALUES (NULL , '".$this->data['title']."', '".$this->data['full_title']."', '1', '1', '".$this->data['description']."', '0', '0')");
                    $this->data['insert_id'] = self::insert_id();
                    rename('data/forum/_categories/'.$_FILES['thumb']['name'], 'data/forum/_categories/'.$this->data['insert_id'].'.'.$this->data['extension']);
                $this->printMessage("Категория успешно создана");
            } else {
                $this->printError($this->errors);
            }
        } else {
            $this->printError("У тебя недостаточно прав");
        }
        echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL='.$_SERVER['REQUEST_URI'].'">';
    }
}

?>
